<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>
    <script>
        // 问题：实现一个mySome方法达到内置some效果
        // 只要有一个元素是那么返还结果就是true   ||  运算符

        var arr = [false, false, true, false];
        // 浏览器内置的some方法
        // some的调用
        // var res =   arr.some(function(item,key,arr){
        //     console.log("函数内部的",item);
        //     return item;
        // })
        // console.log(res);

        // 需要实现some的定义
        // 循环每一项，如果遇到true那么就会停止循环
        function mySome(arr, fn) {
            var judge = false;
            for (var i = 0; i < arr.length; i++) {
                // arr[i]:调用的时候item i就是调用的时候key 
                // 需要判断 fn函数的执行结果  结果中如果有一个是true那么 mySome的返还结果就为true
                var res = fn(arr[i], i, arr)
                if (res) {
                    judge = judge || res;
                    break;
                }
            }
            return judge;
        }

        var res = mySome(arr, function (item, key, arr) {
            console.log("内部循环的", item);
            return item;
        })
        console.log("结果", res);
        // 拆分过程一
        // 现在我们是 定义了2个函数（2个函数分别是 mySome命名函数  和  fn 匿名函数）  再调用了2个函数
        // mySome函数的定义
        // function mySome(arr,fn){
        //     // arr[i]:调用的时候item i就是调用的时候key  
        //     fn("值",2,arr);  // fn函数的调用
        // }
        // // mySome函数的调用
        // mySome(arr,function(item,key,arr){
        //         // 这个函数是 fn函数的定义
        //     console.log(item,key,arr);
        // })
        // 当我们调用 mySome 也会调用  fn函数


        // 拆分过程二 注意 ：把函数赋值给一个变量判断  和直接判断函数 区别在于调用的次数
        // function test(){
        //     console.log("test");
        //     return true;
        // }

        // var judge = false;
        // // 这样函数会被调用2次；
        // var res = test();
        // if(res){
        //     judge = res || judge;
        // }

        // console.log(judge);






    </script>
</body>

</html>